跳到主要内容

攻击

51%攻击问题

我们常常听到的51%攻击是什么? 其实问题的核心就是要有超过一半以上的算力就可以“双花”链上的资产。下面我们举例说明。如果我们想象十个人中的一个人试图欺骗和修改区块链的内容,他将不得不调整几个区块并计算新的符合难度目标的哈希值。我们知道要找到符合条件的哈希值非常困难,因此,网络上一个不诚实的人无法击败九个诚实的人。 如果一个不诚实的人试图在一个区块上做出欺骗行为,那会在网络中创造另一个链条,但是欺骗的链条永远无法赶上诚实的链条——因为一个人的努力和速度无法击败九个人累积的努力和速度。因此,这个机制可以保证网络中最长的链是最诚实的链。 但如果不是一个人不诚实,而是有六个人不诚实呢?在这种情况下,篡改区块链上的记录就可以实现。这被称为“51%攻击”。如果网络中的大多数人都变得不诚实,并欺骗网络的其余部分,协议目的就失效了。但是我们必须知道区块链系统的弱点:它建立在大多数人群总是诚实的假设之上。

女巫攻击

大规模的P2P系统面临着有问题的和敌对的节点的威胁。为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制系统的很大一部分,破坏系统的冗余策略。我们把这种模仿多个身份的攻击定义为“女巫攻击”(Sybil Attack)。在女巫攻击中,攻击者通过创建大量的假名标识来破坏对等网络的信誉系统,使用它们获得不成比例的大的影响。 对等网络上的实体是能够访问本地资源的一个软件。实体通过呈现身份在对等网络上通告自身。多于一个标识可以对应于单个实体。换句话说,身份到实体的映射是多对一的。对等网络中的实体为了冗余、资源共享、可靠性和完整性而使用多个标识。 默认情况下,通常假定每个不同的标识对应于不同的本地实体。实际上,许多身份可以对应于相同的本地实体。这样攻击者就可以向对等网络呈现多个身份,充当多个不同的节点,并可能能够获得对网络的不成比例的控制水平,例如影响投票结果。 女巫攻击包括以下类型。 1)直接通信:女巫节点直接与合法节点进行通信。 2)间接通信:没有一个合法的节点能够直接与女巫节点进行通信。相反,一个或多个恶意的节点宣称它们能够到达女巫节点。就是这个恶意节点自己接收或者拦截相关消息。 3)伪造身份:攻击者可以产生任意的女巫身份,以进行攻击。 4)盗用身份:攻击者进行节点的身份盗用,在原有节点摧毁或者失效前很难检测。 5)同时攻击:攻击者将其所有的女巫身份一次性地同时参与到一次网络通信中。攻击者可以循环使用它的多个女巫身份,让人看起来是多个节点。这就是同时性。 6)非同时攻击:攻击者只在一个特定的时间周期里使用一部分女巫身份,而在另外一个时间段里使这些身份消失而以另外的女巫身份出现。这看起来就像网络中正常的节点撤销和加入。 传统防止女巫攻击的方法是采用一个信任的代理来认证实体。 验证技术可用于防止女巫攻击和消除伪装敌方实体。本地实体可以基于中心化权威机构来验证远程身份,其确保身份和实体之间的一一对应,甚至可以提供反向查找。身份可以直接或间接地验证。在直接验证中,本地实体查询中央授权机构以验证远程标识。在间接验证中,本地实体依赖于已经接受的身份,继而保证所讨论的远程身份的有效性。

交易所安全

目前的数字交易所绝大多数是中心化的,其安全性隐患非常大,基本上可以包括人为的安全性和技术系统的安全性漏洞。这些交易所因为储存了大量的加密货币而成为黑客的觊觎目标。以下是几次著名的交易所安全事件,说明数字交易所存在严重安全隐患。 ·2018年3月,全球第二大交易所币安遭遇黑客入侵,导致大量用户账户里的比特币被卖掉,买入一虚拟币;黑客同时在世界各大交易所挂比特币空单套利。虽然黑客没有直接从币安提币,但却造成币安被侵入账户的账面损失,并间接造成了大量比特币持有者的账面损失。 ·2018年1月,日本最大的加密货币交易所Coincheck遭黑客袭击,价值5.3亿美元的数字货币不翼而飞。 ·2017年12月,韩国比特币交易所Youbit因遭遇“黑客攻击”,丢失了17%的数字货币,宣布破产。 基本所有交易所系统都面临技术上的安全隐患。有以下几类安全性问题: ·系统安全; ·硬件设备安全; ·交易通道安全; ·数字钱包安全; ·终端安全; ·用户操作安全。 同时也有许多项目开始研发运行在区块链的去中心化交易所。比起中心化的技术,运行在区块链上的去中心化交易所是利用区块链的三个特性——分布式、透明、不可篡改的特性来加强交易所的安全性与透明度。 (1)中心化交易所 中心化交易所(Centralized Exchange)其实就是用户主要使用的交易所,Bitfinex、Poloniex、Coincheck、币安等都是中心化交易所。用户使用这些交易所的方式,通常就是到网站上注册,根据不同国家的法规经过一连串的认证程序后,把加密货币转入他们指定的钱包地址后,就可以开始在上面交易加密货币。 其中的交易不见得会发生在区块链上真正的货币交换,取而代之的可能仅是修改交易所数据库内的资产数字,用户看到的只是账面上数字的变化,交易所只要在用户提款时准备了充足的加密货币汇出即可。 当使用者把加密货币转到他们提供的钱包地址后,交易所就拥有了操作这些加密货币的权利,使用者必须要信任这个网站会保证货币安全,才能把加密货币转给交易所操作。 正因为中心化交易所拥有了存放大量加密货币的私钥,所以非常容易吸引黑客的攻击。而黑客的目标绝大部分就是这些存放大量加密货币的私钥,偷走了这些私钥就代表盗走这些加密货币。 如图11-1所示为中心化交易所技术架构。 (2)去中心化交易所 去中心化交易所(Decentralized Exchange)跟一般中心化交易所最不一样的地方,就是交易行为发生在区块链上。与中心化交易所的交易实质是在交易所本身的数据库中增减用户资产字段不同的是,去中心化交易所是在区块链上直接交换,加密货币会直接发回使用者的钱包,或是保存在区块链上的智能合约。 这样直接在区块链上交换的好处在于,交易所并不持有用户大量的加密货币,所有的加密货币会储存在区块链上使用者的钱包或智能合约控管。本来需要信任中心化的交易所,现在仅需要信任区块链以及智能合约即可。而用于交易所的智能合约大多会公开源码让所有人可以确认这份合约的细节。 而中心化交易所通常不会公开交易细节的源码,实际上如何运作也只有其内部人员知道。通过公开的智能合约维持交易过程的透明与安全性,有利润的拆分也会公开在区块链上。相信用户会因为信任问题逐渐转向去中心化的交易所。 目前世界上已经有了几种去中心化的交易所在运行,比如EtherDelta和Kyber Network都是比较早期开始发展的交易所。由于开发运营的时间较短,它们尚不够成熟,有待逐渐完善。与中心化交易所相比,去中心化交易所的一个弱势是没有撮合引擎,成交效率低。

程序漏洞

传统的计算机程序一般运行在某个节点或集群上,为某个机构或个人拥有和控制。这样的计算机程序可以随时施加人工干预,可以随时控制。然而,区块链上的智能合约则是一种全新的计算范式。智能合约一经部署就难以修改,执行也是自动执行,不受人为干预。因此,如果智能合约有安全漏洞,就很难防范黑客的攻击。当下,专业技术人员都在努力寻找合适的方式,提高智能合约的安全性和可靠性,帮助保障大家的资金安全。根据一份针对以太坊智能合约的最新调查研究显示,在安全问题研究人员看来,智能合约属于新兴事物,所以缺陷和漏洞还是非常多的。 所谓“智能合约”,其基本内涵就是指可以将一些带有合约性质的条款嵌于我们日常使用的硬件和软件当中,目的是让那些违约者在违反合同时付出一定代价。Szabo将实体售货机称为“智能合约的原型”,因为实体售货机就是根据屏幕上所显示的价格,收取用户投进来的硬币,掉出用户所选中的商品并且正确找零。 以以太坊为例。以太坊是一个开源的有智能合约功能的公共区块链平台。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见。如果智能合约开发者疏忽或者测试不充分,而造成智能合约的代码有漏洞的话,就非常容易被黑客利用并攻击。并且越是功能强大的智能合约,逻辑就越复杂,也越容易出现逻辑上的漏洞。同时,智能合约语言Solidity自身与合约设计都可能存在漏洞。 以太坊开源软件主要是由社区的极客共同编写的,目前已知存在Solidity漏洞、短地址漏洞、交易顺序依赖、时间戳依赖、可重入攻击等漏洞。在调用合约时漏洞可能被利用,而智能合约部署后难以更新的特性也让漏洞的影响更加广泛持久。 另外,以太坊虚拟机(EVM)对于智能合约能够做的事情存在很多硬性限制。这些都牵扯到平台级的安全,甚至可能会威胁到用户特定合约的安全。

区块链安全性的测试指标

区块链的安全性主要考察身份验证、访问控制、加密体系和隐私、密码算法、匿名性、抗攻击能力6个方面。以下是具体的测试指标分析。 1)身份验证。身份验证主要测试5个指标:身份验证的方式、身份验证的场景、防止身份冒用、私钥管理、节点的进出需要身份验证。 2)访问控制。访问控制主要测试7个指标:不同级别账户权限不同、不同分类账户权限不同、超级账户的权限、账户间的授权、账户授权时限控制、账户权限变更、权限变更形式。 3)加密体系和隐私。加密体系和隐私主要测试4个指标:交易信息加密、签名的应用场景、签名使用的私钥保存、私钥丢失能否保护用户财产。 4)密码算法。密码算法主要测试4个指标:密码算法种类、国密算法、加密机、可插拔自定义密码算法。 5)匿名性。匿名性主要测试5个指标:交易匿名、全部匿名还是部分匿名、子账户对其父账户保持交易透明、子账户对其他父账户保持交易匿名、对审计或超级权限账户保持交易透明。 6)抗攻击能力。抗攻击能力主要测试4个指标:抵御DDoS、黑客等网络攻击、抗攻击能力程度、最大容忍节点失效个数、最大容忍节点欺骗个数。